Method and system for intercepting user inputs

ABSTRACT

Systems and methods relating to a keyboard interceptor are disclosed. The keyboard interceptor receives a first input by a user into a keyboard application on a mobile device. A search query is generated based on the first input and data is located based on the search query. The data is associated with a record comprising a record identifier. The keyboard interceptor associates a GUI element of the keyboard application with the record identifier. A second input is received corresponding to selection of the GUI element. A unique tracking link is generated comprising a URL associated with the locate data and an identifier associated with the selection of the GUI element. The unique tracking link is passed to a web browser application executing on the mobile device to access the website. The web browser application stores a cookie comprising the identifier associated with the selection of the GUI element.

CROSS-REFERENCE TO RELATED APPLICATIONS

This application is a continuation of U.S. application Ser. No.17/236,646, filed Apr. 21, 2021, which claims the benefit of U.S.Provisional Application No. 63/156,153, filed Mar. 3, 2021. Theabove-referenced patent applications are incorporated by reference inits entirety.

BACKGROUND OF THE INVENTION Field of the Invention

The present disclosure relates to mobile computing devices. Inparticular, the present disclosure relates to a method and system forintercepting user inputs and more particularly to a keyboard interceptorfor mobile computing devices.

Description of Related Art

Web browsers are software applications that provide access to the WorldWide Web. On many computing devices, such as desktop computers, webbrowser extensions are available for web browsers. A web browserextension is a software application that adds a capability, utility, orfunctionality to a web browser. Mostly, web browser extensions extend orenhance the functionality of the web browser, interact with websites,provide proactive information based on browsing, or provide useful toolsto enhance the user experience.

Web browsers are also available for mobile devices and offer similarfunctionality to their desktop counterparts. On mobile devices, some webbrowsers, such as Safari on iOS and Chrome on Android, lack web browserextension support. Thus, the enhanced functionality provided by webbrowser extensions may not be available to mobile device users. Thereare several reasons why web browser extensions are not available on somemobile web browsers. For example, extensions present on a laptop ordesktop may not be intuitive enough to use on the screen sizes availableon mobile devices. There are also security restrictions within mobileoperating systems, and limitations with web browser applicationcapacity. Further, mobile operating systems may prioritise stability andtherefore have fewer features compared to desktop based operatingsystems.

SUMMARY

According to a first aspect of the present disclosure, there is provideda computer-implemented method comprising:

-   -   receiving a first input by a user into a keyboard application on        a mobile device;    -   generating a search query based on the first input;    -   locating data based on the search query, wherein the data is        associated with a record, the record comprising a record        identifier;    -   associating, within a user interface of the keyboard        application, an element of a graphical user interface, GUI, of        the mobile device, with the record identifier;    -   receiving a second input, by the user, corresponding to        selection of the element of the GUI;    -   responsive to receiving the second input, generating a unique        tracking link comprising a URL and an identifier associated with        the selection of the GUI element, the URL being for a website        associated with the located data;    -   passing the unique tracking link to a web browser application        executing on the mobile device, whereby to access the website;        and    -   storing, by the web browser application while accessing the        website, a cookie comprising the identifier associated with the        selection of the GUI element.

The computer-implemented method may be at least partially performed by akeyboard interceptor on the mobile device. Therefore, thecomputer-implemented method provides replicated functionality of desktopweb browser extensions for the mobile device by means of a keyboardinterceptor.

The computer-implemented method provides a convenient search for thewebsites based on the first input by the user. Storing a cookiecomprising the identifier associated with the selection of the GUIelement allows tracking of the user's activity on the website as aresult. The tracking may be used to associate a particular activity withthe user. Furthermore, the form of the unique tracking link is securebecause it does not contain any user information. Therefore, a thirdparty who snoops on the user as they browse the website will not be ableto associate the particular activity of the user on the website with anyindividual.

The identifier associated with the selection of the GUI element may berandomly generated.

The user may be able to provide input via one or more fields of the userinterface of the keyboard application. The method may further comprisedetermining that the field into which the first input is provided is afield that is designated for Uniform Resource Locators and/or internetsearches. Locating the data may include forwarding an applicationprogramming interface, API, call to a server. Generating the uniquetracking link may then comprise forwarding a further API call to theserver requesting the unique tracking link. Locating the data mayinclude performing a search of a local storage of the mobile device. Theserver may store the generated unique tracking link in the database.

The first input may be text typed by the user. The method may furthercomprise waiting a predetermined amount of time after the user hasfinished typing before generating the search query. Waiting apredetermined amount of time increases the efficiency of the method byreducing the number of computations that need to be performed.

The unique tracking link may comprise the URL encoded with theidentifier associated with the selection of the GUI element. The datamay be merchant data, and the URL may be a redirect URL for a websiteassociated with the merchant. The merchant data may further comprise alogo associated with the merchant, and an active deal associated withthe merchant. In this case, associating the element of the GUI with therecord identifier may comprise displaying the logo associated with themerchant and text indicating the active deal. The cookie may allow themerchant to determine that a purchase has been made by the user. Themethod may further comprise receiving a reward issued by the merchant inresponse to the purchase made by the user.

In the case that the server generates the unique tracking link, theserver may further store the unique tracking link in the database andassociate it with a user identity. Therefore, because the cookiecomprises the identifier associated with the selection of the GUIelement that is assigned when the unique tracking link was generated,and because the unique tracking link may be stored in association withthe user identity when the unique tracking link is generated, themerchant can identify the user as being sent to their website via anaction of the server. The merchant may therefore provide an entityassociated with the server a commission based on the purchase.

The method may further comprise displaying an icon within a userinterface of the keyboard application indicating that the data has beenlocated. A further input, by the user, may be received corresponding toselection of the icon. In this case, displaying the element of the GUIis responsive to receiving the further input.

According to a second aspect of the present disclosure there is provideda mobile device configured with a set of instructions which whenexecuted by the mobile device cause the mobile device to perform theabove-described method.

According to a third aspect of the present disclosure there is provideda system. The system comprises a keyboard application with a keyboardinterceptor, a database and a server communicatively coupled to thedatabase. The database comprises a plurality of records, each of therecords comprising: a record identifier; data; and a URL for a websiteassociated with the data. The server is configured to locate data in thedatabase in response to receiving an API call. The system is configuredto perform the method according to the first aspect of the presentdisclosure.

Further features and advantages of the invention will become apparentfrom the following description of preferred embodiments of theinvention, given by way of example only, which is made with reference tothe accompanying drawings.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 illustrates schematically a system according to an example;

FIG. 2 illustrates schematically a mobile device according to anexample;

FIG. 3 shows a flow diagram illustrating a process flow according to anexample;

FIG. 4 shows a flow diagram illustrating a process flow according to afurther example;

FIG. 5A illustrates a display on a mobile device according to anexample;

FIG. 5B illustrates the display on the mobile device according to afurther example; and

FIG. 6 a flow chart of a method according to an example.

DETAILED DESCRIPTION

Web browsers running on certain computing devices, such as desktopcomputing devices, may interface with one or more web browserextensions. A web browser extension may enhance a certain functionalityof the web browser. In one example, a web browser extension monitors apurchase made by a user on a website. The web browser extension may,either before or after the purchase, analyse the URL of the website anddetermine whether a merchant associated with the URL has an agreementwith the web browser extension developer. The agreement may involve themerchant providing the developer a commission for sending the user tothe website in order to make the purchase. In return, a portion of thecommission may be awarded to the user. The portion of the commissionawarded to the user may be in the form of cash back, discount codes,donations for charity, or another financial incentive.

On certain mobile web browsers, such as Safari on iOS, and Chrome onAndroid, web browser extensions are not available. The embodimentsdescribed herein relate to a keyboard interceptor for mobile devices. Akeyboard interceptor is software that replicates the same level ofinteractivity, information and utility found in a desktop or laptop webbrowser extension but is separate from a mobile web browser. Variousimplementations of such a keyboard interceptor will now be described.

Single User Implementation

In an example implementation of the present disclosure, a keyboardinterceptor, operating on a mobile device of a user, generates a uniquetracking link and passes it to a web browser application executing onthe user's mobile device. This single user implementation will now bedescribed in detail with reference to FIGS. 1-6.

FIG. 1 illustrates schematically a system 100 according to an example.The system 100 comprises a mobile device 110, a server 150 and adatabase 160. The mobile device 110 is a mobile computing device thatgenerally supports a mobile operating system, such as a smart phone anda tablet computer. The mobile device 110 is communicatively coupled tothe server 150. The server 150 is further communicatively coupled to thedatabase 160. The database 160 stores data relating to brands, and forany given brand the data may be stored in fields of the database, thefields comprising one or more of URLs, metadata such as offers,keywords, categories and descriptions etc. of that brand.

The mobile device 110 comprises a keyboard application 120. Third-party,or custom, keyboards are available on mobile devices and provide analternative to native keyboards that are included as part of the mobileoperating system. Custom keyboards can be provided as a softwaredevelopment kit (SDK) to include within an application that acts as acontainer for the SDK, wherein the SDK provides keyboard functionality.Thus, a user wanting to use a custom keyboard must download anapplication that includes a keyboard with custom keyboard functionality.It will be appreciated that custom keyboards are not limited to thoseprovided by an SDK but can be custom built within the mobile applicationitself. This functionality is detectable by the mobile operating system.The user can change input methods from the native keyboard to the customkeyboard through the settings, for example. A keyboard application, suchas the keyboard application 120 in FIG. 1, will be understood to mean acontainer application including an SDK providing keyboard functionality.Further, an SDK providing keyboard functionality will be referred to asa keyboard SDK. The keyboard application 120 may be provided by anentity associated with the server. Alternatively, the keyboardapplication 120 may be provided by a third-party that differs from theentity associated with the server 150. The third-party may be an entitythat provides goods and/or services in exchange for payment. Forexample, the third party may be a subscription service provider, autility service provider, or a merchant selling goods. In one example,the keyboard application 120 may be provided as part of a mobile networkbilling application. The mobile network billing application may bedownloadable from an application repository compatible with theoperating system running on the mobile device 110 or may be preloadedonto the mobile device 110. The mobile network billing application maybe required for a user to monitor information associated with an accountregistered with the mobile network.

In the example shown in FIG. 1 the keyboard application 120 enables auser to interact with the mobile device 110 through functionalityprovided to the keyboard application via keyboard SDK 130, which is tobe understood to be an exemplary keyboard SDK having the featuresdescribed above. The keyboard SDK 130 enables the keyboard application120 to display a virtual keyboard on a touchscreen of the mobile device110, through which a user may type characters into the mobile device110. The characters may relate to any language and/or symbols. Inanother example, the keyboard SDK 130 may be operatively associated witha software component that converts speech to text for display by thekeyboard application 120 via a user interface.

In embodiments described herein, the mobile device 110 further comprisesa keyboard interceptor 140. The keyboard interceptor 140 is provided aspart of the keyboard application 120, for example as part of a containerapplication further comprising an SDK that provides keyboardfunctionality. The keyboard interceptor 140 is configured to monitorinput via the functionality provided by the keyboard SDK 130. That is,the keyboard interceptor 140 tracks an input in the form of typed textor text resulting from speech to text etc. The keyboard SDK 130 includesan event listener application programming interface (API). The eventlistener API allows the keyboard interceptor 140 to receive eventnotifications indicating input to the keyboard by the user. In theexample where a user is typing, the keyboard SDK 130 may include aspecific text input monitoring API. The keyboard interceptor 140 canthen communicate with the keyboard SDK 130 via the text input monitoringAPI to receive event notifications corresponding to text entered by theuser. In a further example, the keyboard interceptor 140 may receiveevery event notification issued via the event listener API and determinewhich event notifications correspond to entered text.

Based on a first input entered using the keyboard application 120, thekeyboard interceptor 140 generates a search query. The search query maybe based on exact content of the first input. For example, if the firstinput is the text string “jon”, then the search query generated by thekeyboard interceptor 140 may be based on the text string “jon”. Inanother example, the keyboard interceptor 140 may first modify the firstinput prior to generating the search query. For example, if the firstinput is the text string “jon”, the keyboard interceptor 140 may modifythe text string to “john”, and therefore generate a search request basedon the text string “john”.

The keyboard interceptor 140 then makes an API call to the server 150,causing the server 150 to locate data based on the search query. Therequest may be sent as a “GET” Hypertext Transfer Protocol (HTTP)request containing the text string “john”. On receipt of the HTTPrequest, the server 150 communicates with the database 160 in order tolocate data matching the entered text string (in this example “john”).As explained above, the database 160 stores data relating to brands, andfor any given brand the data may be stored in fields of the database,the fields comprising one or more of URLs, metadata such as offers,keywords, categories and descriptions etc. of that brand. For eachbrand, the data for that brand can be linked via a unique recordidentifier (ID), which is generated by the server 150.

When the server 150 performs a search of the database 160 for dataentries that match the entered text string, the server 150 submits aquery that will be executed by the database 160 across all databaseentries. This may involve communicating with an external service, suchas Azure™ search service. When a database entry that matches the queryis located, the server 150 retrieves an above-mentioned correspondingunique record ID, and sends that unique record ID in a message to thekeyboard interceptor 140 e.g. as a HTTP message. This allows the server150 to identify entries in the database in future without having toperform a further search. The message may also include data (e.g. nameof the brand, logo of the brand) retrieved from one or more of thedatabase fields that match the search query.

In one example, the user may enter a descriptive keyword. This causesthe keyboard interceptor to generate a search query for the text“trainer”. The server 150 then performs a search of the database 160 forentries relating to the text “trainer”. In this example, the database160 may return e.g. the brand Nike, if that is stored in a databasefield in association with keyword “trainer”. The message sent to thekeyboard interceptor 140 may then indicate that data relating to thebrand Nike has been located based on the search term “trainer”. Themessage also includes a unique record ID, which, as mentioned above, hasbeen generated by the server 150.

The server 150 may provide the keyboard interceptor 140 with one or moreauthentication tokens as part of an initial configuration process foruse by the keyboard application 120 when authenticating the keyboardinterceptor to the server 140. The authentication tokens may be issuedif the server 150 can determine that the user of the keyboardinterceptor 140 is validly registered with the server 150. This mayrequire the user to register an account with an entity associated withthe server 150. For example, if the keyboard application 120 isassociated with the same entity that is associated with the server 150,then the user may provide login details to the keyboard application 120.Successful login by the user causes the keyboard application 120 toreceive an access token that can be used to authenticate communicationbetween the server 150, and the keyboard application 120 and/or thekeyboard interceptor 140. When the keyboard application 120 is notassociated with the same entity that is associated with the server 150,such as when the keyboard application 120 is associated with a mobilenetwork operator, the keyboard interceptor 140 may communicate directlywith the server 150 to receive an access token. The server 150 may alsoissue one or more refresh tokens to the keyboard application 120 and/orthe keyboard interceptor 140. The refresh tokens are configured to renewthe access token and may conform to the OAuth protocol.

In either case, the authentication tokens may include information aboutthe user. The information may include one or more identifiers associatedwith the user. In one example, the identifier associated with the usercomprises a device ID. The device ID may be derived from theInternational Mobile Equipment Identity (IMEI) number of the mobiledevice 110, which is unique to every mobile phone device. Other examplesof device ID are possible. For example, the device ID may be derivedfrom a phone number associated with the mobile device 110. If theidentifier associated with user includes a device ID, the keyboardapplication 120 could be associated with a mobile network operator (amobile network billing app, for example).

Once the message comprising the unique record ID (and other datareturned by the server 150 from the database 160) has been received bythe keyboard interceptor 140, the keyboard interceptor 140 associates anelement in the graphical user interface (GUI) with the unique record ID.For example, the keyboard interceptor 140 may display, within a userinterface of the keyboard application 120, a dedicated element in theGUI. The GUI element serves to notify the user that data has been foundthat is relevant to what the user entered (in this example, “jon”). Thededicated GUI element may take the form of a button, text, icon, andother interactive elements. Selection of this GUI element may involvethe user physically pressing on a region of a display of the mobiledevice 110 that is presently displaying the GUI element. Alternatively,or in addition, the keyboard interceptor 140 may associate one or moreGUI elements already present in the user interface of the keyboardapplication 120 with the message. For example, when the message isreceived from the server 150 indicating that data has been located thatis relevant to the search query, the keyboard interceptor 140 mayassociate an enter button, displayed in the user interface of thekeyboard application 120, with the unique record ID.

In either case, when the user selects the GUI element, the keyboardinterceptor 140 receives a second input corresponding to selection ofthe GUI element. It is to be understood that selection of the GUIelement is an input that is second to, which is to say that it follows,what the user enters in order to seed the initial search query (in thisexample “jon”).

Selection of the GUI element causes the keyboard interceptor 140 to senda request to the server 150 comprising the unique record ID, so that theserver 150 can identify the database record(s) for which data waspreviously retrieved and returned to the keyboard interceptor 140 inresponse to the search query.

In response, the server 150 retrieves the unique record ID from themessage and searches the database 160 for further information associatedwith the unique record ID. This may comprise a redirect URL for awebsite associated with the unique record ID. The server 150 thengenerates a unique tracking link, which comprises a randomly generatedclick ID and the redirect URL. The unique tracking link optionallyadditionally comprises parameters such as an Urchin Tracking module(UTM) parameter that provides tracking statistics for the redirect URL.Other types of information, such as a server identifier that identifiesthe server 150, may be included in the unique tracking link. The serveridentifier allows for any actions taken by the user on the websiteassociated with the domain name to be attributed to the server 150generating the unique tracking link that sent the user to the website.

The unique tracking link is then stored in the database 160 inassociation with the unique record ID and an identifier for the user andis sent back to the keyboard interceptor 140 as e.g. an HTTP message.The keyboard interceptor 140 may pass the unique tracking link to a webbrowser application executing on the mobile device 110. The uniquetracking link may be automatically placed into an address bar of the webbrowser application, thus, effectively, directing the user to thewebsite following a single click of a GUI element. Alternatively, theunique tracking link may be inserted into the address bar, giving theuser the option to follow the link, or to select a different link.

Accessing the website causes the web browser application to store acookie generated by the website. The cookie comprises the click ID whichas described above is present in the unique tracking link. The cookieprovides the owner of the website the capability to monitor the user'sactivity while the user browses the website.

Any actions taken by the user after selecting the GUI element can beattributed to that user by reading the click ID associated with theunique tracking link. When the unique tracking link further comprises aserver identifier, an entity associated with the tracking link canprovide the server 150 associated with the server identifier anindication of the action taken by the user. The server 150 then comparesthe unique tracking link received from the entity and the stored uniquetracking links. Because the click ID portions of the link will match,the server 150 can then attribute the action to a particular user.Advantageously, the form of the unique tracking link is secure becauseit does not contain any user information. Therefore, a third party whosnoops on the user as they browse the website associated with the uniquetracking link will not be able to associate the actions taken by theuser with any individual.

In yet another example, the user may have entered the first and secondinputs (in this example “jon” and selection of the GUI element displayedby the keyboard application 120) using an application that is not theweb browser application. In this case, on selecting the GUI element, theoperating system invokes the web browser application, wherein the uniquetracking link is automatically placed into the address bar. In any case,passing the unique tracking link to the web browser applicationinstructs the web browser application to access the websitecorresponding to the URL.

The system 100 described above provides replicated functionality ofdesktop web browser extensions for mobile devices by means of a keyboardinterceptor 140. The system 100 provides a convenient search of websitesbased on input entered by the user and allows tracking of the user'sactivity on the website as a result. The tracking may be used toassociate a particular activity with the user.

For example, the data within a record in the database 160 may beassociated with a merchant associated with a brand, and the monitoredactivity may be one or more purchases made by the user after theselection of the GUI element as described above. As the cookie comprisesthe click ID that is assigned when the unique tracking link wasgenerated, and because the unique tracking link is stored in associationwith the user identity when the unique tracking link is generated, themerchant can identify the user as being sent to their website via anaction of the server 150. The merchant may therefore provide an entityassociated with the server 150 a commission based on the one or morepurchases. This commission may then be partially returned to the user inthe form of cash-back & coupon/discount vouchers/codes.

FIG. 2 illustrates schematically a mobile device 200 according to anexample. The mobile device 200 may be the same mobile device 110 of thesystem 100 shown in FIG. 1. The mobile device 200 is a mobile computingdevice that supports a mobile operating system. Example mobile devicesinclude any version of iPhone® running iOS, the mobile operating systemdeveloped by Apple Inc. of Cupertino, United States. Other examplemobile devices include mobile computing devices running the Androidoperating system developed by Google LLC of Mountain View, UnitedStates.

The mobile device 200 comprises a network interface 210, a keyboardapplication 220, a Web Browser Application 250, a graphical userinterface (GUI) 260, a processor 270, and storage 280. The keyboardapplication 220 comprises a keyboard SDK and a keyboard interceptor 240.The user interface 260 may be a touch sensitive display. The keyboardSDK 230 provides the keyboard application 220 with virtual keyboardfunctionality that is displayed on the GUI 260 and allows the user toprovide input to the mobile device 200. The processor 270 is configuredto cause the keyboard interceptor 240 to execute certain instructions.

As has been described with respect to the system 100, the keyboardinterceptor 240 tracks input entered by a user. FIG. 3 is a process flowdiagram illustrating the communication flow 300 between the keyboardinterceptor 240, the server 150 and the database 160 according to anexample implementation. At step S310, the keyboard interceptor 240 hasreceived a first input from a user, as described above. In response, thekeyboard interceptor 240 generates a search query associated with thefirst input. The search query is forwarded to the server 150 via an APIcall M310. The API call M310 may be a “GET” HTTP request comprising thesearch query. As discussed above, authenticated communication betweenthe server 150 and the keyboard interceptor 240 may be achieved via anauthentication process whereby the server 150 provides one or moreauthentication tokens to the keyboard interceptor 240. Theauthentication tokens may include information about the user of thekeyboard interceptor 240, such as a device ID.

The data to be located may include data relating to brands, such as oneor more of URLs, metadata such as offers, keywords, categories anddescriptions etc. of that brand. When the one or more URLs areassociated with a merchant, the metadata may include an indication ofwhether there are any active deals available to the user. As discussedabove, associated data can be linked via a unique record identifier(ID), which is generated by the server 150.

The mobile device 200 can communicate with the server 150 via thenetwork interface 210. The network interface 210 may be a wirelessinterface arranged to facilitate a data flow between the mobile device200 and the server 150. The network interface 210 may further facilitatea data flow between the mobile device 200 and other remote devices, suchas one or more additional servers and other mobile devices connected tothe same communications network. For example, the network interface 210may communicate with remote devices in accordance with a communicationprotocol. The communication protocol may be any wireless standardsincluding IEEE 802.11a, 802.11b, 802.11g, 802.11n, or 802.15. When thenetwork interface is a wireless interface, the network interface mayinclude one or more radios.

At step S320, the server 150 sends a request M320 to the database 160.The request M320 causes the database to locate data matching the searchquery. The request M320 may be a Structured Query Language (SQL) query.The request M320 causes the database 160 to search across all databaseentries for data matching the search query. This may involvecommunicating with an external service, such as the Azure™ searchservice.

At step S330, the server 150 sends the unique record ID in a messageM330 to the keyboard interceptor 240. The message M330 may be an HTTPmessage. The message M330 indicates to the keyboard interceptor 240 thatdata matching the search query has been found.

At step S340, in response to receiving the message M330, the keyboardinterceptor 240 associates, within a user interface of the keyboardapplication 220, a GUI element with the unique record ID. When thekeyboard application 220 is a virtual keyboard, the GUI element may be anew GUI element that is displayed in a banner directly above the userinterface of the keyboard in response to receiving the message M330. TheGUI element may alternatively be a character key within the virtualkeyboard.

At step S350, the keyboard interceptor 240 receives the second inputcorresponding to the user selecting the GUI element. In response, thekeyboard interceptor 240 sends a request M340 to the server 150comprising the unique record ID. The request M350 may be an HTTP “POST”request. The request M350 may be authenticated using any authenticationtokens that were retrieved as part of the authentication processdescribed above.

At step S360, the server 150 retrieves information associated withunique record ID by sending a further request M360 to the database 160.The request M360 may be an SQL query. The unique record ID allows theserver 150 to identify the database record(s) for which data waspreviously retrieved via the request M320. In this example theinformation comprises a redirect URL for a website associated with theunique record ID. The server 150 then generates a unique tracking linkcomprising a randomly generated click ID and the redirect URL. Theunique tracking link may be stored in the database 160 by the server150.

The unique tracking link optionally additionally comprises parameterssuch as an Urchin Tracking module (UTM) parameter that provides trackingstatistics for the redirect URL. Other types of information, such as aserver identifier that identifies the server 150, may be included in theunique tracking link. The server identifier allows for any actions takenby the user on the website associated with the domain name to beattributed to the server 150 generating the unique tracking link thatsent the user to the website.

The unique tracking link is then stored in the database 160 inassociation with the unique record ID. At step S370, the server 150sends the unique tracking link to the keyboard interceptor 240 via afurther message M370. The further message M370 may be an HTTP message,as discussed above.

Once the unique tracking link is available to the keyboard interceptor240, the unique tracking link is passed to the Web Browser Application250. When launched, the unique tracking link provides access to thewebsite corresponding to the URL. Accessing the website causes the WebBrowser Application 250 to store a cookie generated by the website. Thecookie comprises the click ID which as described above is present in theunique tracking link. The cookie provides the owner of the website thecapability to monitor the user's activity while the user browses thewebsite.

In a second example implementation, the keyboard interceptor 240communicates with local storage via the keyboard application 220 inorder to locate the data and generate the unique tracking link. In thissecond example, data, similar to that stored by the database 160 in thefirst example, may be stored locally in the storage 280. In this case,there may be an initial replication process between the database 160 andthe local storage 280, whereby the data stored in the database 160 iscopied to the local storage 280. The keyboard application 220 preferablyregularly communicates with the server 150 to refresh the data storedlocally.

In this second example, the keyboard interceptor 240 receives inputentered by the user from the keyboard application 220 and generates asearch query. To locate data, the search query is passed to the keyboardapplication 220. The keyboard application 220 can then perform a searchof the local storage 280 to locate data matching the search query.Locating the data may involve an intermediate step of retrieving thedata from cache. For example, the data may already be cached in aseparate memory (not shown) and so already available to the keyboardapplication 220, or the data may be located in the storage 280 first andcached into the separate memory before being retrieved by the keyboardapplication 220. The message, comprising the record identifier, andindicating that the data has been located that matches the search query,is then passed from the keyboard application 220 to the keyboardinterceptor 240, causing a GUI element displayed by the keyboardapplication 220 to be associated with the message. Accessing localstorage instead of communicating with a remote server may speed up theprocess of locating data matching the search query. In this secondexample, when the user selects the GUI element, the keyboard interceptor240 forwards a request to the keyboard application 220 that comprisesthe unique record ID. The keyboard application 220 can then forward therequest to the server to generate the unique tracking link.

FIG. 4 shows a flow process diagram illustrating a communication flow400 between the keyboard interceptor 240, the keyboard application 220,the server 150 and the database 160 according to the second exampleimplementation. At step S410, the keyboard application 120 sends arequest M410 to the server 150 requesting data stored in the database160. This may occur as part of an initialisation process when thekeyboard application 220 is first installed on the mobile device 200. Inthis instance, the user may be required to create, or login to, anaccount associated with the server 150. Said account may grantauthorisation of the keyboard application 220 to communicate with theserver 150.

At step S420, a data synchronisation process occurs wherein recordsstored on the database 160 are downloaded onto the storage 280 via adata transfer M420. The data synchronisation process may occur inresponse to the server 150 determining that the keyboard application 220can validly communicate with the server 150. The data transfer may be aJavaScript Object Notation (JSON) data response. Once the data transferM420 is completed, the records stored in the database 160 are now alsopresent in the storage 280.

At step S430, the keyboard interceptor 240 receives a first input andgenerates a search query based on the first input. The keyboardinterceptor 240 sends a request M430 comprising the search query to thekeyboard application 220. The request M430 may be an API call betweenthe keyboard interceptor 240 and the keyboard application 220.

At step S440, the keyboard application 220 communicates with the localstorage 280 in order to locate data that matches the search query. Thekeyboard application 220 sends a request M440 to the storage requestingdata that matches the search query. When data matching the search queryis located, the unique record ID associated with the data is retrieved.Locating the data may involve the intermediate step of retrieving thedata from cache.

At step S450, after data has been located, the keyboard application 220sends a message M450 to the keyboard interceptor 240 comprising theunique record ID. The keyboard interceptor 240 then associates a GUIelement in the user interface of the keyboard application 220 with theunique record ID.

At step S460, the keyboard interceptor 240 associates, within a userinterface of the keyboard application 220, a GUI element with the uniquerecord ID in response to receiving the message M450.

At step S470, the keyboard interceptor 240 receives a second inputcorresponding to the selection of the GUI element. In response to thesecond input, the keyboard interceptor 240 sends a request M470 to thekeyboard application 220 comprising the unique record ID.

At step S480, the keyboard application 220 sends a further request M480of the local storage 280 for information associated with the uniquerecord ID. The unique record ID allows the keyboard application 220 toidentify the record(s) for which data was previously retrieved via therequest M440. The information comprises a redirect URL for a websiteassociated with the unique record ID. The keyboard application 220 thengenerates a unique tracking link comprising the redirect URL and arandom click ID. The unique tracking URL may be stored in the localstorage 280 and/or sent to the server 150 via an HTTP message.

At step S490, the keyboard application 220 sends the unique trackinglink to the keyboard interceptor 240 via a further message M490.

In a third example implementation using the mobile device 200, thekeyboard interceptor 240 receives input entered by the user from thekeyboard application 220 and generates a search query. As in the secondexample, the search query is passed to the keyboard application 220. Inthis third example, the keyboard application 220 makes an API call to aserver to locate data matching the search query. The API call is similarto the API call M310, but is instead between the keyboard application220 and the server 150. To this end, the keyboard application 220 mayfurther comprise the necessary API functionality required to communicatewith the server, in which case the keyboard application 220 may itselfsend the search query to the server 150 to locate the data. When thedata is located, the message comprising the unique record ID is returnedto the keyboard application 220 and delivered to the keyboardinterceptor 240. The keyboard interceptor 240 then associates, within auser interface of the keyboard application 220, a GUI element with themessage. In this third example, when the user selects the GUI element,the keyboard interceptor 240 makes an API call to the keyboardapplication 220, causing the keyboard application 220 to itself generatean API call to the server 150 for the unique tracking link. As for theother examples, this API call may be sent as an HTTP “GET” request tothe server 150.

In a fourth example implementation using the mobile device 200, thekeyboard interceptor 240 receives the input entered by the user from thekeyboard application 220 and generates a search query. As in the secondand third examples, the search query is passed to the keyboardapplication 220. The keyboard application 220 then performs a search ofthe local storage 280 to locate data matching the search query. If datarelevant to the search request is not found by the keyboard application220, the search query is then forwarded to the server 150 via an APIcall, similar to the API call M310, but between the keyboard application220 and the server 150. This might occur if relevant data is not presentin the local storage 280 but is available to the server 150, because thedata available to the server may be more up to date. In this fourthexample, the unique tracking link may be generated by the keyboardinterceptor 240 or by the keyboard application 220. Alternatively, theunique tracking link may be generated by the server 150 in response toreceipt of a suitable API call originating at the keyboard interceptor240, such as the API call M350.

In some examples, the user may be able to provide input via one or morefields of the user interface of the keyboard application. Example fieldtypes include a URL field, a password field, and a numerical field. Thekeyboard interceptor 240 may determine that the field into which thefirst input is provided is a field that is designated for URLs.Alternatively, or in addition, the keyboard interceptor 240 maydetermine that the field into which the first input is provided is afield that is designated for searches, examples of which are text fieldsfor search engines. In a further example, the keyboard interceptor 240may determine that the field into which the first input is provided isneither designated for URLs nor searches. For example, the user may becomposing a message addressed to a second user into a messengerapplication. The keyboard interceptor 240 may still be active andperforming steps S310-S370 or S430-S490. In response to receiving asecond input from the user corresponding to selection of the GUIelement, the keyboard interceptor 240 may cause the Web BrowserApplication 250 to be launched from the messenger application. The WebBrowser Application 250 may be a default Web Browser Application.

The keyboard interceptor 240 may cooperate with any application runningon the mobile device 200 in which the user can provide input via thekeyboard application 220. The keyboard interceptor 240 may detect thecurrent application into which the user is providing input. Based onthis detection, the keyboard interceptor 240 may lookup a list ofapplications to, or otherwise, determine whether the current applicationis one that is enabled for use with the keyboard interceptor 240. Thelist may be stored in the local storage 280 and/or in the database 160.If the keyboard interceptor 240 determines that the current applicationis in enabled for use, then steps S310-S370 or S430-S490 may beperformed. On the other hand, if the keyboard interceptor 240 determinesthat the current application is not enabled for use, the keyboardinterceptor 240 may become inactive and not perform steps S310-S370 orS430-S490. In an example, a particular mobile application may beconsidered to be not enabled if that mobile application is of aparticular type or meets certain prespecified criteria such as beingassociated with data stored in the database 160. If the keyboardinterceptor 240 remained active and data relating to a competitor isalso stored in the database, then the user may be given an optionbetween the brand and the competitor in their keyboard application 220.

In some examples, the keyboard interceptor 240 will debounce the search,or wait, for a predetermined amount of time after the user has finishedproviding the first input before generating the search query. Suchdebouncing may increase the efficiency of the process by reducing thenumber of computations that need to be performed. The predeterminedamount of time may be a fixed amount of time, such as 0.3 seconds.Alternatively, the predetermined amount of time may be dynamicallydetermined. For example, the keyboard interceptor 240 may utilise alearning algorithm in order to determine an optimal amount of time todebounce the generation of the search query based on the user's usagepatterns. In this case, the predetermined amount of time to debounce thegeneration of the search query for a slower typer may be longer than thepredetermined amount of time to debounce the search for a quicker typer.For example, an optimal amount of time to debounce the search for a fasttyper would result in unnecessary additional searches for a slower typerbecause searches may be performed after each key stroke by the slowertyper. This may result in locating domain names that are not relevant tothe text that will eventually be typed, using unnecessary computationalresources to do so.

In an example, the unique record ID is associated with a particularmerchant, and the database 160 stores a logo and an active dealassociated with the merchant, together with keywords associated with themerchant and any other metadata that may assist in identifying themerchant. The logo associated with the merchant and text indicating theactive deal may be included with the unique record ID in the messagereturned by the server 150 to the keyboard interceptor 240. In thisexample the logo may be displayed within the GUI element.

As has been discussed above, because the cookie comprises the click IDthat is assigned when the unique tracking link was generated, andbecause the unique tracking link is stored in association with the useridentity when the unique tracking link is generated, any actions takenby the user when accessing the website can be linked to the user. Theunique tracking link may comprise a further identifier associated withthe server 150. The identifier associated with the server 150 allows themerchant to identify the server 150 that directed the user to themerchant's website. The merchant may therefore associate a commissionbased on the purchase with the server 150, and the user identifierenables an entity associated with the server 150 to identify the userthat made the purchase. This allows the entity associated with theserver to reward the user with a portion of the commission. The rewardmay be in the form of cashback, one or more vouchers, a charitabledonation, or other financial incentive. Knowing that the user mayreceive some form of reward for making a purchase on the merchant'swebsite provides an incentive for the user to visit the merchant'swebsite in the first place. Displaying the logo associated with themerchant and text indicating an active deal in the user interface of thekeyboard application further incentivises the user to select the GUIelement and visit the merchant's website. For example, displaying thelogo of a merchant and text such as “up to 3.4% cashback” may direct auser to that merchant, even though the user had not initially planned onvisiting that merchant's website.

In a further example, the authentication tokens used by the server 150that allow authenticated communication between the server 150, and thekeyboard application 220 and/or the keyboard interceptor 240 include adevice identifier. This is particularly beneficial when the keyboardapplication 220 is provided by a mobile network operator or other entitythat provides goods and/or services in exchange for payment. In thiscase, a portion of commission rewarded to the user for a purchase may beprovided to user as money off the payment. For example, the keyboardapplication 220 may be a mobile network billing application associatedwith the mobile network operator. In this example the mobile networkbilling application comprises an SDK providing the keyboardfunctionality and a keyboard interceptor 240 described above. In thisexample, the keyboard interceptor 240, being part of the mobile networkbilling application, generates the device identifier and forwards it tothe server 150. The server 150 may then return the authentication tokensthat allows authenticated communication between the server 150 and thekeyboard interceptor 240. In this case, the authentication tokensinclude the device identifier. The device identifier may be generatedfrom at least one of: the IMEI number of the mobile device, and a phonenumber associated with the device. When the user subsequently makes apurchase on a merchant's website, that merchant will forward commissionto the network operator. A portion of the commission can then be passedto the user e.g. as money off the user's next monthly data plan payment,or as credit where that user is on a pay as you go tariff. Moregenerally, when the keyboard application 220 is provided by athird-party that provides goods/services in exchange for payment fromthe user, the merchant will forward commission to the third-party. Aportion of this commission may then be passed to the user. For example,when the third-party provides a subscription service to the user, theportion of the commission passed to the user may be in the form of moneyoff the user's next bill. In a further example, when the third-party isa goods provider, the portion of the commission passed to the user maybe in the form of a voucher for money off a next purchase of said goods.In any case, the keyboard interceptor 240 generates the deviceidentifier and forwards it to the server 150. The server 150responsively returns authentication tokens allowing authenticatedcommunication between the server 150 and the keyboard interceptor 240.

The server 150 may store such information as any identifiers associatedwith the user, a record of purchases made by that user, and rewardsearned by that user.

As mentioned above, it is contemplated that the search query may returna plurality of different records. This may occur if, for example, theinput entered by the user is a general term for which there are manymatching records. For example, the text “trainer” may be identified as akeyword in a record associated with the merchant Nike and in a recordassociated with the merchant John Lewis. In the case where the searchquery returns a plurality of different records, the keyboard interceptormay associate a plurality of GUI elements on the user interface of thekeyboard application with the respective record identifiers. The usercan then select one of the plurality of GUI elements which will causethe keyboard interceptor to generate a unique tracking link directed tothe selected URL.

In a further example, the keyboard interceptor 240 may cause an icon tobe displayed on the user interface of the keyboard application 220. Theicon may signify to the user that the keyboard interceptor 240 iscurrently active and available to search for data when the user beginsproviding input. In one example, selecting the icon may launch a customapplication within the keyboard application 220. A user interface of thecustom application may be displayed above the user interface of thekeyboard application 220. Alternatively, the user interface of thecustom application may take the place of the user interface of thekeyboard application 220. Functionality provided by the customapplication may be included as part of the keyboard application 220.

In one example, when the search query returns a plurality of differentrecords, the server 150 will generate a corresponding plurality ofunique record IDs, each of which is returned to the keyboard interceptor240. Once received, the keyboard interceptor 240 will display acorresponding plurality of GUI elements, wherein each GUI element isassociated with a respective unique record ID generated by the server150. In some examples, the keyboard interceptor 240 causes an icon to bedisplayed in the user interface, which provides a notificationindicating how many results have been located as part of the search. Thenotification may be in the form of a number appearing in a corner of theicon. In this way, the number may dynamically alter as the user typesand the search query changes. The icon may take the place of the GUIelement described above, providing a notification minimised state of thekeyboard interceptor. In this case, an indication that relevant data hasbeen located in the search will not immediately be shown to the user asa GUI element, but the icon will indicate that data has been found, bydisplaying a number, e.g. “1”, in the corner of the icon, for example.When the user selects the icon, the GUI element will then be displayed.This notification functionality provides the user with the option of notdisplaying the GUI element in every instance, but still indicates thatdata has been located.

When the data is associated with merchants, the custom application maydisplay available deals or other information associated with merchants.The available deals may be displayed without the user providing anyinput. In this way the user can determine which merchants are currentlyproviding incentives before providing input. Alternatively, or inaddition, the merchants displayed in the custom application may bedynamically updated as the user continues typing.

The custom application may itself present an editable GUI element, suchas a text field, to the user. In this arrangement, a user typing intothe editable GUI element may cause the custom application to functionlike the keyboard interceptor 240 described above, so that the querysearch and unique tracking link generation can all be performed by themini-app.

Alternatively, or additionally, the icon displayed in the user interfaceof the keyboard application 220 may provide access to a settings menuwhen selected. The settings may allow a user to adjust one or moresettings relating to the keyboard application 220. Example settings thatmay be adjusted include user interface of the keyboard application 220appearance, what information relating to the located data should bedisplayed within the user interface of the keyboard application 220, andpreferences regarding which merchants should be shown.

FIG. 5A shows an example display 510 on a mobile device 500 according toan embodiment. The mobile device comprises a keyboard interceptor andkeyboard application providing the afore-described keyboardfunctionality. The display 510 shows a user interface of a keyboardapplication 520 running on the mobile device 500. The user interface ofthe keyboard application 520 features a virtual QWERTY keyboard thatallows a user to input text into the mobile device. In the example shownin FIG. 5A, text is currently being typed into a web browserapplication. The user interface of the keyboard application 520 includesan icon 530. The icon indicates to a user that the keyboard interceptoris currently active. The icon 530 may function as the icon discussedabove with respect to the custom application. The address bar 540 of theweb browser application is an example of a URL text field. A user hastyped “john” into the address bar 540. As a result, the keyboardinterceptor has formed a search query for the text “john”, as has beendiscussed above.

FIG. 5B shows the display 510 on the mobile device 500 sometime afterthe user first started typing. The user has now typed “johnlew” into theaddress bar 540. As a result, a keyboard interceptor installed on themobile device 500 has formed a search query for the text “johnlew”, ashas been discussed above. This has resulted in the locating of a recordcomprising plurality of data associated with the merchant John Lewis. Inthis case, the data in the record includes a logo associated with themerchant “John Lewis”, along with the text “JOHN LEWIS” and anindication of an available deal associated with the merchant. Themessage received by the keyboard inceptor in this example comprised thelogo, text, and available deal. The keyboard interceptor has thendisplayed the logo 550, the text and the indication in a banner abovethe user interface of the keyboard application 520. The user may thenselect one of the logo, text and indication of the available deal inorder to visit the merchant's website. As discussed above, the selectioncauses the keyboard application to generate a unique tracking linkcomprising a URL for a website associated with the merchant and anidentifier associated with the user.

In the example shown in FIG. 5B, the icon 530 in the suggestion bar ofthe user interface of the keyboard application 520 is displaying anotification indicating that one merchant has been located. Selectingthe icon 530 may activate a custom application which may display furtherinformation about the merchant as described above.

In the examples described above the keyboard application 220 ispresented as a standalone application that is downloaded to a user'smobile device or as an application associated with a mobile networkoperator and downloaded to the user's mobile device as part ofprovisioning by the network operator. It is to be understood that thekeyboard application 220 may be associated with any third-partyapplication, including applications for peer-to-peer messaging.Additionally, or alternatively the functionality of the keyboardapplication 220 —including the keyboard interceptor—may be coded into orotherwise embedded in a third-party application.

FIG. 6 sets out, in broad terms, steps performed by a mobile device,such as the mobile devices 110, 200, and a server 150 according to theembodiments described above. At block 610, the method 600 involvesreceiving a first input by a user into a keyboard application 120, 220on a mobile device 110, 200. The keyboard application 120, 220 is anapplication container for a keyboard SDK 130, 230 and the keyboardinterceptor 140, 240. The keyboard SDK 130, 230 provides keyboardfunctionality to the keyboard application 120, 220. The keyboardfunctionality includes at least one method of providing input to themobile device 110, 200. The keyboard application 120, 220 may beconfigured to display a virtual keyboard on a display of the mobiledevice 110, 200, such as a virtual QWERTY keyboard, allowing the user toinput text into the mobile device 110, 200. Alternatively, or inaddition, the keyboard SDK 130, 230 may allow input via a speech to textprocedure, whereby the keyboard SDK provides functionality to recordaudio as a user speaks into the mobile device 110, 200. In a furtherexample, the keyboard SDK 130, 230 may provide functionality to allow auser to provide input by drawing on the display of the mobile device110, 200, for example, using a stylus or a finger. In any case, thekeyboard interceptor 140, 240 receives a first input from the keyboardapplication 120, 220.

At block 620, the method 600 involves generating a search query based onthe first input. The search query comprises the first input, forexample, a user may type the text “amazon” via the keyboard application120, 220. In this example, the keyboard interceptor 140, 240 determinesthat the text “amazon” has been typed and forms a search query based thetext “amazon”.

At block 630, the method 600 involves locating data based on the searchquery. As has been discussed above with respect to step S310, locatingthe data may be performed by making an API request M310 to a server 150in communication with a database 160. The data stored on the database160 is associated with a record, wherein the record comprises a uniquerecord ID. Said data is related to brands, and for any given brand, thedata may be stored in fields of the database 160. The fields may includeone or more URLs, and metadata such as offers, keywords, categories anddescriptions etc. of the brand. The data is then returned to thekeyboard interceptor 140, 240 in a message M330 comprising the uniquerecord identifier, as is shown in step S330. In a further example, ashas been discussed with respect to step S440, the search query may bepassed to the keyboard application 120, 220 via a message M440 whichlocates the data by performing a search of storage 280 of the mobiledevice 110, 200 for data relevant to the search query. The located datais then returned to the keyboard interceptor 140, 240 via a messageM450, as shown in step S450. In yet a further example, the search querymay be passed to the keyboard application 120, 220 which locates thedata by forwarding an API request to the server 150. In yet anotherfurther example, the data is located in a two-step process whereby thesearch query is initially passed to the keyboard application 120, 220and a search of the storage 280 of the mobile device 110, 200 isperformed for data to the search query. If relevant data is found, thenit is returned to the keyboard interceptor 140, 240. If relevant data isnot found in the storage 280, the search query may be sent via an APIrequest to the server, which then performs a search of the database 160.

At block 640, the method 600 involves associating, within a userinterface of the keyboard application 120, 220, a GUI element with themessage, as in steps S340 and S460. The GUI element may include textassociated with the located data. For example, if the data foundincludes the text “Amazon”, then the GUI element may display the text“Amazon” within the user interface of the keyboard application 120, 220.In one example, in response to receiving the data, the user interface ofthe keyboard application 120, 220 may further display an icon indicatingthat the data has been located. In response to the selection of the iconby the user, the GUI element may be displayed. The GUI element may be anexisting character key within a user interface of the keyboardapplication 120, 220, such as an enter button.

At block 650, the method 600 involves receiving a second input, by theuser, corresponding to selection of the GUI element. The selection maybe achieved by the user physically pressing on a region of a display ofthe mobile device 110, 200 that is presently displaying the GUI element.

At block 660, the method 600 involves generating a unique tracking linkcomprising a URL and an identifier associated with the selection of theGUI element, in response to receiving the second input. The URL is for awebsite associated with the located data. In an example, the uniquetracking link comprises the URL encoded with the identifier associatedwith the selection of the GUI element. The encoding may be achieved byappending a string associated with the identifier associated with theselection of the GUI element to the URL. The unique tracking link may begenerated by making a further API request M350 to the server 150, asshown in step S350, or by passing the request M470 to the keyboardapplication 120, 220, as is shown in step S470. The API callM350/request M470 includes the unique record ID so that the server 150or keyboard application 120, 220 can locate the record from which thedata was located. In the case where the server generates the uniquetracking link, the server sends a further request M360 to the database,as shown in step S360, in order to locate the redirect URL associatedwith the located data. On the other hand, when the keyboard applicationgenerates the unique tracking link, the keyboard application 120, 220sends a further request M480 to the local storage, as shown in stepS480, in order to locate the redirect URL. Alternatively, the keyboardapplication may send its own API request to the server, requestinggeneration of the unique tracking link.

At block 670, the method 600 involves passing the unique tracking linkto a web browser application 250 executing on the mobile device 110,200, whereby to access the website. When the unique tracking link isgenerated, it is passed to a web browser application 250 on the device110, 200. If the user is not currently within a web browser application250, the default web browser application of the mobile device 110, 200may be launched and execute the unique tracking link to navigate to thewebsite. Launching the default browser from outside of a web browserapplication 250 allows the method 600 to provide a shortcut to awebsite, while allowing tracking within the website. The unique trackinglink may be sent from the server 150 to the keyboard interceptor 140,240 via a message M370, as shown in step S370. Alternatively, the uniquetracking link may be sent from the keyboard application 120, 220 to thekeyboard interceptor 140, 240 via a message M490, as is shown in stepS490.

At block 680, the method 600 involves storing, by the web browserapplication 250 while accessing the website, a cookie comprising theidentifier associated with the selection of the GUI element.

The method 600 provides an enriched personal browsing experience on amobile device by overcoming a lack of available web browser extensionson some mobile web browsers. The method 600 does this by providing analternative to web browser extensions that utilises a keyboardinterceptor. The operation of the keyboard interceptor enhances thefunctionality of a standard keyboard application by providing anautomatic search option for URLs and keywords associated with URLs basedon user input, and automatically generating unique tracking links thatallow the user's activity to be tracked on a website. As discussedabove, this is particularly useful when the domain name corresponds to amerchant.

In yet another example, the unique tracking link may not include anidentifier associated with the selection of the GUI element. In thiscase, the operation of the keyboard interceptor provides searchfunctionality without subsequent tracking.

In yet another example, the unique tracking link generated at step S360in communication flow 300 may be a redirect link comprising a randomlygenerated click ID, an identifier of a brand, and a URL for a domainassociated with an entity also associated with the server 150 instead ofa URL for a website associated with data located in the database 160.The domain may be hosted by, or in communication with, an intermediaryserver (not shown) that is coupled to the server 150. The identifier ofa brand may be a record ID associated with data located in step S320. Inthis example, upon launching of the redirect link in the web browserapplication 250, the user is directed to the intermediary server, whichcommunicates with the server 150 to determine an appropriate website towhich to direct the user. The intermediary server then generates afurther unique tracking link comprising a URL for the appropriatewebsite and the click ID previously generated. The user is then directedto the appropriate website and tracking of any user activity can beperformed, as described above.

In a modification of this example, the redirect link generated at stepS360 may not contain a click ID, and instead only comprise the URL ofthe domain hosted on the intermediary server and an identifier of abrand (record ID etc.). In this example, the redirect link may be termeda generic link because it does not contain a click ID. The user may havean identifier stored on their mobile device 200 which identifies theuser to the intermediary server. In one example, the identifier is acookie stored in the web browser application 250 and downloaded when theuser previously visited the intermediary server. In other examples, thisidentifier may be stored in local storage 280 and generated in aninitial configuration of the keyboard interceptor 240 and/or keyboardapplication 220, amongst other examples. When the browser navigates tothe domain, the intermediary server identifies the user from theidentifier and communicates with the server 150 to generate a uniquetracking link comprising a URL for a website associated with the brand,and a click ID.

Peer-to-Peer Communication Implementation

In a further example implementation of the present disclosure, a linkmay be generated by a keyboard interceptor operating on a mobile deviceof a first user and sent, via a communications application, to one ormore second users.

For example, with reference to block 680 of the method 600 describedabove, when a first user is currently in a messaging application, thegenerated unique tracking link may be pasted into a text field of themessaging application. The first user may then send a message to asecond user, wherein the message comprises the unique tracking link. Thesecond user may then select the unique tracking link. Any resultingactivity of the second user may then be attributed to the first user.This is useful when the unique tracking link is associated with amerchant. Any purchases made by the second user on the merchant'swebsite will be attributed to the first user. The first user may thenreceive a reward based on the purchase by the second user.

In general terms, the keyboard interceptor 240 operating on the deviceof the first user may be configured to allow the insertion of a linkinto a communication from the first user to one or more second users. Inthe following passages of the disclosure, the first user will bereferred to as the sender, and the second user(s) will be referred to asthe recipient(s). The sender's mobile device 200 comprises the keyboardinterceptor 240.

The recipient(s) is/are identifiable to an entity associated with theserver 150 via the intermediary server discussed above. For example, therecipient(s) may have the keyboard interceptor 240 installed on theirmobile device 200 and may have previously visited the intermediaryserver through an action of their keyboard interceptor 240. By “visited”it is to be understood that a link has previously been accessed via thekeyboard interceptor 240, causing the keyboard interceptor 240 to send amessage to the intermediary server e.g. via a bespoke API, causing theintermediary server to download a cookie to the recipient's device, foruse in identifying the recipient to the intermediary server. Forexample, the recipient may be a user who has utilized the keyboardinterceptor 240 in accordance with the “Single User Implementation”described above, in particular for a case in which the Single UserImplementation involves use of an intermediary server. In suchimplementations a cookie corresponding to the intermediary server mayhave been downloaded to the recipient's web browser application. As analternative to a cookie, the bespoke API may cause the intermediaryserver to send, and the web browser application to store, the identifierfor the user that is stored in the database 160 in association with theunique record ID when generating the unique tracking link (steps S360,S370).

As a further alternative, or in addition, the recipient(s) may have anapplication installed on their mobile device 200 comprising an SDKassociated with the entity also associated with the server 150. Anidentifier identifying the recipient to the intermediary server may havebeen generated and stored on the recipient's mobile device 200 as partof an initial configuration of the application.

In any of these example implementations the result is that an identifier(cookie, or non-cookie) is stored locally for use in identifying therecipient to the intermediary server when the recipient accesses a linkthat it receives from a sender, as will now be described.

The keyboard interceptor 240 on the sender's mobile device 200 may firstdetermine that the sender is currently providing input into acommunications application. A communications application is anyapplication which can be used by the sender to communicate with the oneor more recipients. Examples include, but are not limited to, textmessaging applications, email applications, messenger applications suchas Facebook® Messenger, WhatsApp®, Snapchat®, social media applicationssuch as Facebook®, Instagram®, YouTube®, Twitter® and LinkedIn. Thecommunications application may be a web browser application into whichthe first user is communicating with one or more recipients using aweb-based messenger service or a posting on a website, for example.Types of communications include, but are not limited to text messages,emails, messenger application messages, social media posts, websitepostings, YouTube® description postings and browser-basedcommunications.

To determine that the sender is currently providing input into acommunications application, the keyboard interceptor 240 may detect thecurrent application type and/or determine that the sender is providinginput into a field associated with a communication, which may involvedetermining that the field is a not one of a URL, browser, or searchfield.

When it is determined that the sender is providing input into acommunications application, steps S310-S350 or S430-S470 may beperformed as described above with regards to FIGS. 3 and 4. However, inthis further embodiment, at step S360 (or step S480), a generic link isgenerated comprising: a URL for a domain hosted by an intermediaryserver coupled to the server 150, and an identifier of a brand, such asa record identifier, as discussed above. The generic link directs to thedomain associated with an entity also associated with the server 150,instead of to a website associated with a brand in the database 160. Thegeneric link may be generated either by the server 150 or the keyboardapplication 220, depending on the particular implementation, asdescribed above with respect to the communication flows 300 and 400.

At steps S370 and S490, the generic link is passed to the sender'skeyboard interceptor 240, which inserts the generic link into thecommunication. The sender may at first be provided with the genericlink, as a paste item for example, so that they may insert the link intomultiple communications with ease. Alternatively, or in addition, thekeyboard interceptor 240 may automatically insert the link into thecurrent communication. The sender may then send the communicationcomprising the generic link to the one or more recipients.

A recipient of the communication may click on the generic link, whichlaunches a default web browser application installed on the recipient'smobile device 200, and directs the recipient to the domain on theintermediary server. When the keyboard interceptor 240 is installed onthe recipient's mobile device 200 (i.e. included within a keyboardapplication 240 installed on the mobile device 200), and/or therecipient has previously visited the domain, then the recipient will beidentifiable to the intermediary server through the identifier asdiscussed above. This identifier may be a cookie previously downloadedto the recipient's web browser application through previous interactionbetween the recipient and the intermediate server, or some otheridentifier stored on the recipient's mobile device 200 and which isaccessible to the intermediary server. The intermediary server may haveaccess to the user identity that has been assigned to the recipient bythe server 150. Thus, the entity associated with the domain may identifythe recipient by the user identity in the identifier.

The intermediary server may direct the recipient to a website associatedwith the brand via a further link, alternatively referred to below as aredirect link. This may be performed automatically by the intermediaryserver so that the recipient may not even be aware that they have beenredirected to the intermediary server. Alternatively, the domain mayinclude a webpage providing details of the website associated with thebrand. The webpage may provide the recipient with an interactive GUIelement, with which the recipient can interact in order to be directedto the website associated with the brand.

If the user presses the GUI element, then the intermediary servergenerates the further link. The further link comprises a URL for thewebsite associated with the brand and an identifier of the server 150 sothat any actions performed by the recipient, after being redirected tothe website associated with the brand, can be attributed by the server150. Thus, any commission earned by an action of the recipient on thewebsite, for example a purchase, may be logged by the entity associatedwith the server 150.

The intermediary server may communicate with the server 150 to generatea unique tracking link comprising a URL for the website associated withthe brand, a randomly generated click ID and an identifier of theserver. The unique tracking link may then be stored by the server 150 inassociation with the recipient's user identity, as described above.Including the click ID in the unique tracking link allows any action ofthe recipient to be tracked. In this case, the recipient may receivecommission earned by any actions performed on the website.

If, on the other hand, the recipient is not identifiable to theintermediary server, for example if the recipient does not have thekeyboard interceptor 240 installed on their mobile device, then thedomain still directs the recipient to the website associated with thebrand via a further link comprising a URL of the website associated withthe brand and an identifier of the server 150. The difference is thatthis recipient is not identifiable, and as a result any commissionearned by an action performed by the recipient is simply associated withthe entity associated with the server 150.

In some examples, the search query based on the first input by thesender may match a plurality of records in the database 160. Forexample, if the sender types “Nike” into a communication, then theserver 150 may identify records for both the brand “Nike” and a merchantthat sells Nike® products. When a recipient clicks a received genericlink, at least one of the keyboard interceptor 240 on the recipient'smobile device 200 (if present) and the intermediary server may detect acurrent geographical location of the recipient. Based on the determinedgeographical location, the intermediary server, in communication withthe server 150, may identify the best commission rate from the pluralityof results identified in the database 160, and generate a linkcomprising a URL of a website associated with the result offering thebest identified commission.

In a further example, the redirect link generated by the sender includesa randomly generated click ID. The click ID may be generated and storedin association with the sender's user identity as has been discussedabove. When the redirect link is sent to the recipient, and therecipient clicks on the redirect link, the recipient is directed to thedomain associated with the entity also associated with the server 150.In this case, the intermediary server communicates with the server 150to generate a unique tracking link comprising a further randomlygenerated click ID. The click ID and the further click ID may be storedin association with one another. The intermediary server then redirectsthe recipient, via the unique tracking link, to a website. In this case,any action performed by the recipient on the website may be attributedto both the sender and the recipient by the server 150 via theassociation between the click ID and the further click ID. For example,the recipient(s) may have the keyboard interceptor 240 installed ontheir mobile device 200 and may have previously visited the intermediaryserver through an action of their keyboard interceptor 240 as discussedabove. In this case, a cookie may have been downloaded to therecipient's web browser application as discussed above. Alternatively,or in addition, the recipient(s) may have an application installed ontheir mobile device 200 comprising an SDK associated with the entityalso associated with the server 150. The identifier may have beengenerated and stored on the recipient's mobile device 200 as part of aninitial configuration of the application. In any case, the identifieridentifies the recipient to the intermediary server.

The above-described examples involving insertion of a link into acommunication from a first user to one or more second users may beconsidered to embody the following features:

First, a method to be performed by a mobile device of a first user, themethod comprising: receiving, by a keyboard application operating on amobile device associated with the first user, a first input; generating,by the keyboard application, a search query based on the first input;locating data based on the search query, wherein the data is associatedwith a record stored in a database, the record comprising a recordidentifier; associating, within a user interface of the keyboardapplication, an element of a graphical user interface, GUI, of the firstmobile device, with the record identifier; receiving, by the keyboardapplication, a second input by the first user, corresponding toselection of the element of the GUI; responsive to receiving the secondinput, generating a link comprising a URL and the record identifier, theURL being for a domain hosted by an intermediary server; generating amessage comprising the link and sending, by a communications applicationoperating on the mobile device, the message to a second user.

Second, a method to be performed by a mobile device of a second user inco-operation with the method performed by the mobile device of the firstuser, this method comprising: receiving, by a communications applicationoperating on a mobile device of the second user, a message containing alink comprising a URL associated with a domain hosted by an intermediaryserver and a record identifier identifying a record stored in adatabase, the message originating from a mobile device of a first user;receiving an input, by the second user, corresponding to selection ofthe link in the message; passing the link to a web browser applicationexecuting on the mobile device of the second user, whereby to access thedomain hosted by the intermediary server; generating a unique trackinglink comprising a URL for a website associated with the recordidentifier, and an identifier associated with the selection of the link;redirecting, by the intermediary server, the second user to the website;and storing, by the web browser application on the mobile device of thesecond user while accessing the website, a cookie associated with theselection of the link.

As mentioned above the communications application may be one of:Facebook® Messenger, Instagram®, WhatsApp®, Snapchat®, Facebook®,YouTube®, Twitter®, LinkedIn, and a web browser application executingone of: a web-based messenger service, and a website permitting postingsby the first user. Locating the data may include forwarding anapplication programming interface, API, call to a server. Generating thelink may comprise forwarding a further API call to the server requestingthe link, the further API call comprising the record identifier.Alternatively, locating the data may include performing a search of alocal storage of the first mobile device. Responsive to passing the linkto a web browser application executing on the mobile device of thesecond user, the intermediary server may determine that an identifieridentifying the second user to the intermediary server is present on themobile device of the second user. Generating the unique tracking linkand the redirecting the second user to the website may be performedautomatically by the intermediary server. Alternatively, the domainhosted by the intermediary server may display a webpage comprising afurther GUI element, and generating the unique tracking link isresponsive to receiving, by the second user, a selection of the furtherGUI element. The identifier associated with the selection of the linkmay be randomly generated. The data may be merchant data, and the URLfor a website associated with the record identifier may be a redirectURL for a website associated with the merchant. The merchant data mayfurther comprise: a logo associated with the merchant; and an activedeal associated with the merchant, and the associating the element ofthe GUI with the record identifier may comprise displaying the logoassociated with the merchant and text indicating the active deal.

The identifier identifying the second user to the intermediary servermay be a cookie or other identifier stored by the web browserapplication in a previous visit to the domain.

In yet a further embodiment, the link generated by the sender to beinserted into a message to one or more recipients may be a uniquetracking link, generated as described above. The unique tracking linkcomprises a URL for a website associated with located data and anidentifier associated with the selection of a GUI element on the mobiledevice of the sender, such as a randomly generated click ID. In thisembodiment, once the unique tracking link is available to the keyboardinterceptor 240, the unique tracking link may be inserted into themessage. The unique tracking link may be inserted automatically by thekeyboard interceptor 240 and/or made available to the sender to insertthe link manually into the communication. The communication is then sentby the sender to one or more recipients. Upon receiving thecommunication, a recipient may select the unique tracking link whichlaunches a default web browser application executing on the recipient'smobile device and be directed to the website associated with the locateddata. The cookie may comprise the identifier associated with theselection of the GUI element, which may be stored by the web browserapplication and used to track the recipient's actions on the website.

Advantageously, the inclusion of the identifier associated with theselection of the GUI element, such as a randomly generated click ID,provides improved security because the unique tracking link does notcontain any user information, and so no user information is communicatedbetween users and/or passed to the website. A third party who interceptsthe communication or snoops on a recipient as they browse the websiteassociated with the unique tracking link will not be able to associatethe actions taken by the recipient with any individual.

The server 150 compares the unique tracking link received from theentity and the stored unique tracking links; more specifically, theserver 150 compares the click ID in the unique tracking link with theidentifier associated with the selection of the GUI element portions,this having been stored by the server 150. Because the identifierassociated with the selection of the GUI element portions of the linkwill match, the server 150 can then attribute the action to a particularuser. Thus, in one example, any commission earned on a purchase made bya recipient can be credited to the sender. The unique tracking link mayfurther comprise a server identifier that identifies the server 150. Inthis example, an entity associated with the website in the uniquetracking link can provide the server 150 associated with the serveridentifier an indication of the action taken by the recipient.

The above-described example involving insertion of a unique trackinglink into a communication from a first user to one or more second usersmay be considered to embody the following features:

First, a method to be performed by a mobile device of a first user, themethod comprising: receiving, by a keyboard application operating on amobile device associated with the first user, a first input; generating,by the keyboard application, a search query based on the first input;locating data based on the search query, wherein the data is associatedwith a record stored in a database, the record comprising a recordidentifier; associating, within a user interface of the keyboardapplication, an element of a graphical user interface, GUI, of the firstmobile device, with the record identifier; receiving, by the keyboardapplication, a second input by the first user corresponding to selectionof the element of the GUI; responsive to receiving the second input,generating a unique tracking link comprising a URL and an identifierassociated with the selection of the GUI element, the URL being for awebsite associated with the located data; and generating a messagecomprising the unique tracking link and sending, by a communicationsapplication operating on the mobile device, the message to a seconduser.

Second, a method to be performed by a mobile device of a second user inco-operation with the method performed by the mobile device of the firstuser, this method comprising: receiving, by a communications applicationoperating on a mobile device of the second user, a message containing aunique tracking link comprising a URL for a website associated with datalocated in a database and an identifier associated with selection of aGUI element on a mobile device of a first user, the message originatingfrom the mobile device of the first user; passing the link to a webbrowser application executing on the mobile device of the second user,whereby to access the website; and storing, by the web browserapplication operating on the mobile device of the second user, whileaccessing the website, a cookie associated with the link.

As mentioned above, the communications application may be one of:Facebook® Messenger, Instagram®, WhatsApp®, Snapchat®, Facebook®,YouTube®, Twitter®, LinkedIn, and a web browser application executingone of: a web-based messenger service, and a website permitting postingsby the first user. Locating the data may include forwarding anapplication programming interface, API, call to a server. Generating theunique tracking link may comprise forwarding a further API call to theserver requesting the unique tracking link, the further API callcomprising the record identifier. Alternatively, locating the dataincludes performing a search of a local storage of the first mobiledevice. The unique tracking link may comprise the URL encoded with theidentifier associated with the selection of the GUI element. The datamay be merchant data, and the URL is a redirect URL for a websiteassociated with the merchant. The merchant data may further comprise: alogo associated with the merchant; and an active deal associated withthe merchant, and the associating the element of the GUI with the recordidentifier may comprise displaying the logo associated with the merchantand text indicating the active deal. The cookie may allow the merchantto determine that a purchase has been made by the second user. The firstuser may receive a reward issued by the merchant in response to thepurchase made by the second user. The method may further comprise,responsive to receiving the data, displaying an icon within a userinterface of the keyboard application indicating that the data has beenlocated; receiving a further input, by the first user, corresponding toselection of the icon, wherein displaying the element of the GUI may beresponsive to receiving the further input. The identifier associatedwith the selection of the GUI element may be randomly generated.

The above embodiments are to be understood as illustrative examples.Further embodiments are envisaged.

It is to be understood that any feature described in relation to any oneembodiment may be used alone, or in combination with other featuresdescribed, and may also be used in combination with one or more featuresof any other of the embodiments, or any combination of any other of theembodiments. Furthermore, equivalents and modifications not describedabove may also be employed without departing from the scope of theinvention, which is defined in the accompanying claims.

1. A method comprising: receiving a first input by a user into akeyboard application on a mobile device; generating a search query basedon the first input; locating data based on the search query, wherein thedata is associated with a record, the record comprising a recordidentifier; associating, within a user interface of the keyboardapplication, an element of a graphical user interface, GUI, of themobile device, with the record identifier; receiving a second input, bythe user, corresponding to selection of the element of the GUI;responsive to receiving the second input, generating a unique trackinglink comprising a URL and an identifier associated with the selection ofthe GUI element, the URL being for a website associated with the locateddata; passing the unique tracking link to a web browser applicationexecuting on the mobile device, whereby to access the website; andstoring, by the web browser application while accessing the website, acookie comprising the identifier associated with the selection of theGUI element.
 2. The method according to claim 1, in which input isentered via one or more fields of the user interface of the keyboardapplication, the method further comprising determining that the fieldinto which the first input is provided is a field that is designated forone of: Uniform Resource Locators; and internet searches.
 3. The methodaccording to claim 1, wherein locating the data includes forwarding anapplication programming interface, API, call to a server.
 4. The methodaccording to claim 3, wherein generating the unique tracking linkcomprises forwarding a further API call to the server requesting theunique tracking link, the further API call comprising the recordidentifier.
 5. The method according to claim 1, wherein locating thedata includes performing a search of a local storage of the mobiledevice.
 6. The method according to claim 1, wherein the unique trackinglink comprises the URL encoded with the identifier associated with theselection of the GUI element.
 7. The method according to claim 1, inwhich the first input is text typed by the user, the method furthercomprising waiting a predetermined amount of time after the user hasfinished typing before generating the search query.
 8. The methodaccording to claim 1, wherein the data is merchant data, and the URL isa redirect URL for a website associated with the merchant.
 9. The methodaccording to claim 8, wherein the merchant data further comprises: alogo associated with the merchant; and an active deal associated withthe merchant, the associating the element of the GUI with the recordidentifier comprises displaying the logo associated with the merchantand text indicating the active deal.
 10. The method according to claim8, wherein the cookie allows the merchant to determine that a purchasehas been made by the user.
 11. The method according to claim 10, furthercomprising receiving a reward issued by the merchant in response to thepurchase made by the user.
 12. The method according to claim 1, furthercomprising: responsive to receiving the data, displaying an icon withina user interface of the keyboard application indicating that the datahas been located; receiving a further input, by the user, correspondingto selection of the icon, wherein displaying the element of the GUI isresponsive to receiving the further input.
 13. The method according toclaim 1, wherein the identifier associated with the selection of the GUIelement is randomly generated.
 14. A keyboard interceptor for a mobiledevice configured to: receive a first input by a user into a keyboardapplication on the mobile device; generate a search query based on thefirst input; send a request to locate data based on the search query,wherein the data is associated with a record, the record comprising arecord identifier; associate, responsive to receipt of a said recordidentifier, within a user interface of the keyboard application, anelement of a graphical user interface, GUI, of the mobile device withthe record identifier; receive a second input, by the user,corresponding to selection of the element of the GUI; responsive toreceiving the second input, generate a unique tracking link comprising aURL and an identifier associated with the selection of the GUI element,the URL being for a website associated with the data; and pass theunique tracking link to a web browser application executing on themobile device, whereby to access the website, wherein the uniquetracking link causes the web browser application to store a cookiecomprising the identifier associated with the selection of the GUIelement.
 15. The keyboard interceptor according to claim 14, whereinsending the request to locate data based on the search query comprisesforwarding an application programming interface, API, call to a server.16. The keyboard interceptor according to claim 15, wherein generatingthe unique tracking link comprises forwarding a further API call to theserver requesting the unique tracking link, the further API callcomprising the record identifier.
 17. The keyboard interceptor accordingto claim 14, wherein the data is merchant data, and the URL is aredirect URL for a website associated with the merchant.
 18. Thekeyboard interceptor according to claim 17, wherein the merchant datafurther comprises: a logo associated with the merchant; and an activedeal associated with the merchant, and the associating the element ofthe GUI with the record identifier comprises displaying the logoassociated with the merchant and text indicating the active deal.
 19. Asystem comprising: a keyboard application comprising the keyboardinterceptor according to claim 15; a database comprising a plurality ofrecords, each of the records comprising: a record identifier; data; anda URL for a website associated with the data; and a servercommunicatively coupled to the database and configured to locate thedata in the database in response to receiving the API call.
 20. Thesystem according to claim 19, wherein the data on the database ismerchant data, and the URL is a redirect URL for a website associatedwith the merchant.